import QtQuick
import QtQuick3D
import QtQuickRO

import "../framework"
import "../Actors"

//游戏模式，对一个游戏大体架构的设计
//游戏模式设定：
/*
  1.每当一个客户端加入时，生成一个对应的角色和玩家控制器并与客户端连接
  2.当客户端离开时，删除对应的玩家控制器和角色
*/
Item
{
    id:root
    property Network curNetwork:network

    //玩家控制器组件
    property Component playerControllerComp
    //角色生成器
    property EntitySpawner characterSpawner

    ROComponent{
        id:playerComp
        comp: playerControllerComp
    }

    Component{
        id:controlBlock//针对每个玩家的控制块

        QtObject{
            id:control
            property ROPlayer player //对应的玩家
            property PlayerController controller //对应的控制器

            property Connections con:Connections{
                target:player.Component
                function onDestruction(){
                    if(control.pawn)
                    {
                        control.pawn.destroy()//摧毁角色
                    }
                    control.destroy()//摧毁控制器
                }
            }

            Component.onCompleted: {
                //为玩家创建控制器
                controller = playerComp.spawnObject({"playerId":player.playerId},[player])
                //为玩家创建一个角色
                let character = characterSpawner.spawn()
                //使用控制器去控制角色
                controller.possess(character)
            }

        }
    }

    Connections{
        target:curNetwork?curNetwork.host:null

        function onNewPlayer(player){
            controlBlock.createObject(root,{"player":player})
        }

    }

}
